from machine import UART 
from machine import Pin 
 
class PowerUART: 
    def __init__(self, seq, baudrate, txPin, rxPin, bits, stop):
        self.uart = UART(seq, baudrate=baudrate, tx=Pin(txPin),rx=Pin(rxPin),bits=bits, stop=stop)
#           seq=1, baudrate=9600, txPin=POWER_PIN_UART1_TX, rxPin=POWER_PIN_UART1_RX,bits=8, stop=1) 
    def write(self, data):
        self.uart.write(data);
        
        
    def any(self):
        return self.uart.any();
    
    def read(self):
        return self.uart.read();
    
    def parse_frame_data(self, data):  
        # 假设一帧数据的格式为：帧头（1字节）+ 数据长度（2字节）+ 数据（n字节）+ 帧尾（1字节）  
        # 检查数据长度是否符合帧格式要求  
        if len(data) < 4:  
            return None, "数据长度不符合帧格式要求"  
      
        # 解析帧头  
        frame_head = data[0]  
        if frame_head != 0xAA:  # 假设帧头为0xAA  
            return None, "帧头不正确"  
      
        # 解析数据长度  
        data_length = (data[1] << 8) | data[2]  
        if data_length + 3 > len(data):  
            return None, "数据长度不正确"  
      
        # 解析数据  
        frame_data = data[3:3+data_length]  
      
        # 解析帧尾  
        frame_tail = data[-1]  
        if frame_tail != 0xBB:  # 假设帧尾为0xBB  
            return None, "帧尾不正确"  
      
        # 返回解析后的数据  
        return frame_data, None


    def assemble_frame_data(self, data, frame_head=0xAA, frame_tail=0xBB):  
        # 将UTF-8格式的字符串转换为十六进制数据  
        hex_data = bytearray.fromhex(data.encode('utf-8').hex())  
      
        # 计算数据长度（假设数据长度为2字节）  
        data_length = len(hex_data)  
      
        # 检查数据长度是否超过最大允许长度  
        if data_length > 0xFFFF:  
            raise ValueError("数据长度超过最大允许值")  
      
        # 组装帧数据  
        frame_data = bytearray()  
        frame_data.append(frame_head)  # 添加帧头  
        frame_data.extend((data_length >> 8).to_bytes(1, 'big'))  # 添加数据长度的高8位  
        frame_data.extend((data_length & 0xFF).to_bytes(1, 'big'))  # 添加数据长度的低8位  
        frame_data.extend(hex_data)  # 添加十六进制数据  
        frame_data.append(frame_tail)  # 添加帧尾  
      
        return frame_data

    def assemble_frame_data_taojingchi(self, data,  frame_tail=0xFF):  
        # 将UTF-8格式的字符串转换为十六进制数据  
        hex_data = bytearray.fromhex(data.encode('utf-8').hex())  
      
        # 计算数据长度（假设数据长度为2字节）  
        data_length = len(hex_data)  
      
        # 检查数据长度是否超过最大允许长度  
        if data_length > 0xFFFF:  
            raise ValueError("数据长度超过最大允许值")  
      
        # 组装帧数据  
        frame_data = bytearray()  
        frame_data.extend(hex_data)  # 添加十六进制数据  
        frame_data.append(frame_tail)  # 添加帧尾  
        frame_data.append(frame_tail)  # 添加帧尾
        frame_data.append(frame_tail)  # 添加帧尾  
        return frame_data




